import os
import zipfile
import shutil
import openpyxl

def extract_embedded_images(excel_file):
    """
    从Excel文件中提取嵌入的图片，并使用F列的内容作为图片名称
    参数:
        excel_file: Excel文件的路径
    """
    # 创建输出目录
    output_dir = "extracted_images"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 创建临时目录用于解压Excel文件
    temp_dir = "temp_excel"
    if os.path.exists(temp_dir):
        shutil.rmtree(temp_dir)
    os.makedirs(temp_dir)
    
    try:
        # 读取Excel中F列的内容作为文件名
        wb = openpyxl.load_workbook(excel_file)
        sheet = wb.active  # 获取第一个工作表
        
        # 从F列获取文件名（跳过第一行标题）
        file_names = []
        for cell in sheet['F'][1:]:  # 从第2行开始
            if cell.value:  # 如果单元格有值
                file_names.append(cell.value)
        wb.close()
        
        # 将Excel文件复制到临时目录并解压
        temp_excel = os.path.join(temp_dir, "temp.xlsx")
        shutil.copy2(excel_file, temp_excel)
        
        # 解压Excel文件（Excel文件本质上是一个ZIP文件）
        with zipfile.ZipFile(temp_excel, 'r') as zip_ref:
            zip_ref.extractall(temp_dir)
        
        # 查找解压后的media文件夹中的图片
        media_dir = os.path.join(temp_dir, "xl", "media")
        if os.path.exists(media_dir):
            # 获取所有图片文件
            image_files = [f for f in os.listdir(media_dir) 
                         if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif'))]
            
            # 检查图片数量是否与F列的内容数量匹配
            if len(image_files) == len(file_names):
                print(f"找到 {len(image_files)} 个图片")
                
                # 按顺序重命名并保存图片
                for img_file, content in zip(sorted(image_files), file_names):
                    src_path = os.path.join(media_dir, img_file)
                    dst_path = os.path.join(output_dir, f"{content}.png")
                    shutil.copy2(src_path, dst_path)
                    print(f"已保存图片: {dst_path}")
            else:
                print(f"警告：图片数量({len(image_files)})与文件名数量({len(file_names)})不匹配")
    
    except Exception as e:
        print(f"处理文件时出错: {str(e)}")
    
    finally:
        # 清理临时文件
        if os.path.exists(temp_dir):
            shutil.rmtree(temp_dir)

if __name__ == "__main__":
    excel_file = "嵌入图片.xlsx"
    extract_embedded_images(excel_file)